from django.conf import settings
from asgiref.sync import async_to_sync
from channels.layers import get_channel_layer
import redis

# 配置 Redis 连接
redis_client = redis.StrictRedis(host=settings.REDIS_HOST, port=settings.REDIS_PORT, decode_responses=True)

class ChatManager:
    """
    管理用户与客服的动态分配和房间管理。
    """
    def __init__(self):
        self.kefu_pool = ['kefu_1', 'kefu_2']  # 客服池
        self.user_to_kefu = {}  # 存储用户与客服的映射

    def assign_kefu(self, user_id):
        """
        分配客服给用户（轮询算法）。
        """
        if user_id in self.user_to_kefu:
            # 如果用户已经分配过客服，则直接返回
            return self.user_to_kefu[user_id]

        # 分配客服（轮询分配）
        assigned_kefu = self.kefu_pool[len(self.user_to_kefu) % len(self.kefu_pool)]
        self.user_to_kefu[user_id] = assigned_kefu

        # 将映射关系存储到 Redis
        redis_client.hset("user_to_kefu", user_id, assigned_kefu)
        return assigned_kefu

    def get_room_name(self, user_id):
        """
        获取用户与客服的房间名。
        """
        kefu_id = self.user_to_kefu.get(user_id, None)
        if not kefu_id:
            kefu_id = self.assign_kefu(user_id)
        return f"user_{user_id}_kefu_{kefu_id}"


chat_manager = ChatManager()
